/*
 * Licensed to the 南京汇海交通科技有限公司
 *
 * Copyright (c) 2025.
 * All rights reserved.
 *
 * 本软件属南京汇海交通科技有限公司所有，在未获得南京汇海交通科技有限公司正式授权情况下，任何企业和个人，不能获取、阅读、安装、传播本软件涉及的任何受知识产权保护的内容。
 */
package com.chframework.boot.web.autoconfigure;

import com.chframework.boot.core.properties.SecurityProperty;
import com.chframework.boot.core.properties.TokenProperty;
import com.chframework.boot.core.security.SecretHandler;
import com.chframework.boot.core.security.TokenHandler;
import com.chframework.boot.web.support.ConfigHelper;
import org.jasypt.encryption.StringEncryptor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration(proxyBeanMethods = false)
public class SecurityAutoConfiguration {

    /**
     * 配置 字符加密处理器
     */
    @Bean
    @ConfigurationProperties(prefix = "application.security")
    public SecurityProperty securityProperty() {
        return new SecurityProperty();
    }

    /**
     * 字符加密处理器
     */
    @Bean
    public SecretHandler secretHandler(SecurityProperty securityProperty) {
        return new SecretHandler(securityProperty);
    }

    /**
     * 为web用户颁发签名参数
     */
    @Bean
    @ConfigurationProperties(prefix = "application.token")
    public TokenProperty tokenProperty() {
        return new TokenProperty();
    }

    /**
     * 为web用户颁发签名
     */
    @Bean
    public TokenHandler tokenHandler(TokenProperty tokenProperty) {
        return new TokenHandler(tokenProperty);
    }

    /**
     * 配置文件敏感信息处理器(此api只用于调试目的)
     * 在yaml中的写法，如下：
     * spring.datasource.password: ENC(密文)
     */
    @Bean
    public ConfigHelper defaultConfigHandler(StringEncryptor encryptor) {
        return new ConfigHelper(encryptor);
    }

}
